import os

import imageio
import logging

import numpy as np


def load_image(image_path, as_gray=False):
    """从文件中载入图像"""
    try:
        logging.info(f"开始载入图像: {image_path}")
        image = imageio.imread(image_path)  # 载入图像文件的数据

        if as_gray:
            # 确保图像是RGB格式的
            if image.ndim == 3 and image.shape[2] in [3, 4]:  # 检查是否为RGB或RGBA图像
                # 计算RGB各通道的平均值作为灰度值
                image = image.mean(axis=2).astype(np.float32)  # 使用astype确保数据类型正确

                # 确保像素值在0到1之间
                if image.max() > 1.0:
                    image = image / 255.0  # 将像素值归一化到0到1的范围内

                # 转换为8位无符号整数
                image = (image * 255).astype('uint8')
            else:
                # 如果图像不是RGB格式，确保其值在0到1之间，然后转换为uint8
                if image.max() > 1.0:
                    image = image / 255.0  # 归一化像素值
                image = (image * 255).astype('uint8')

        logging.info(f"成功载入图像: {image_path}")
        return image
    except Exception as e:
        logging.error(f"载入图像时发生错误: {e}")
        return None
def save_image(image_data, file_path):
    """
    将图像数据保存到指定的文件路径。

    :param image_data: numpy 数组格式的图像数据。
    :param file_path: 要保存图像的文件路径。
        """
    try:
        # 确保文件路径中的目录存在
        os.makedirs(os.path.dirname(file_path), exist_ok=True)

        # 保存图像
        logging.info(f"开始保存图像到: {file_path}")
        imageio.imwrite(file_path, image_data)

        logging.info(f"成功保存图像到: {file_path}")
    except Exception as e:
        logging.error(f"保存图像时发生错误: {e}")